package cn.xmoit.other;

/**
 * @author fangyy
 */
public class CircularQueue {

	/**
	 * 数组：items，数组大小：n
	 */
	private final String[] items;

	/**
	 * 容量
	 */
	private final int n;

	/**
	 * head表示队头下标
	 */
	private int head = 0;

	/**
	 * tail表示队尾下标
	 */
	private int tail = 0;

	/**
	 * 申请一个大小为capacity的数组
	 * @param capacity 容量
	 */
	public CircularQueue(int capacity) {
		items = new String[capacity];
		n = capacity;
	}

	/**
	 * 入队操作，将数据放入队尾
	 * @param item 数据
	 * @return true or false
	 */
	public boolean enqueue(String item) {
		// 队列满了
		if ((tail + 1) % n == head) {
			return false;
		}
		items[tail] = item;
		tail = (tail + 1) % n;
		return true;
	}

	/**
	 * 出队操作
	 * @return 元素内容
	 */
	public String dequeue() {
		// 如果head == tail 表示队列为空
		if (head == tail) {
			return null;
		}
		String ret = items[head];
		head = (head + 1) % n;
		return ret;
	}

}
